using System;

namespace AntEater.Integration
{
    /// <summary>
    /// Provides the Guids needed for the Visual Studio integration
    /// </summary>
    internal static class Guids
    {
        // Package id's
        public const string PackageId = "75d2270f-9444-44d0-8d36-5a15be25dc05";
        public const string PackageCommandsId = "7165153b-331c-4569-bb68-5438aefba78d";

        // Option page id's
        public const string GeneralOptionPageId = "e6717d0b-111e-4a5b-9834-076ca319ed59";
        public const string ExternalBuildPropertiesOptionPageId = "f73d51c2-6c80-48dd-b9c2-75c3a6ee1e19";

        // Tool window id's
        public const string TargetExecutionToolWindowId = "3e253e32-3015-4b97-8962-e4f86d790823";

        // Editor id's
        public const string BuildFileEditorFactoryId = "93fa4dc3-61ec-47af-b0ba-50cad3caf049";

        // Output id's
        public const string OutputWindowId = "31cfac59-eefc-4a61-ac01-5783c34b9db9";

        // Visual Studio ids
        public const string ProjectCSharpId = "FAE04EC0-301F-11D3-BF4B-00C04F79EFBC";
        public const string ProjectVisualBasicId = "F184B08F-C81C-45F6-A57F-5ABD9991F28F";
        public const string ProjectJSharpId = "E6FDF86B-F3D1-11D4-8576-0002A516ECE8";
        public const string ProjectMiscellaneousFilesId = "A2FE74E1-B743-11d0-AE1A-00A0C90FFFC3";
        public const string ProjectSolutionFolderId = "2150E333-8FDC-42a3-9474-1A3956D46DE8";
        public const string XmlDesignerId = "FA3CD31E-987B-443A-9B81-186104E8DAC1";

        // Package Guid's
        public static readonly Guid PackageCommandsIdGuid = new Guid(PackageCommandsId);

        // Editor Guid's
        public static readonly Guid BuildFileEditorFactoryIdGuid = new Guid(BuildFileEditorFactoryId);

        // Output Guid's
        public static readonly Guid OutputWindowIdGuid = new Guid(OutputWindowId);
    }

    /// <summary>
    /// Provides the Strings needed for the Visual Studio integation
    /// </summary>
    internal static class Strings
    {
        // Package strings
        public const string ApplicationName = "AntEater";
        public const string ApplicationDescription = "Visual Studio Extension for visual build file editing and build file target execution.";
        public const string CompanyName = "Home";
        public const string MinimumEdition = "Standard";
        public const string VersionNumber = "1.0";
        public const string RegistryRoot = "Software\\Microsoft\\VisualStudio\\8.0";

        // Settings Name
        public const string SettingsSection = "AntEater";
        public const string SettingsBuildFileKey = "BuildFile";
        public const string SettingsExternalBuildPropertyKey = "ExternalBuildProperty";

        // Option page strings
        public const string GeneralOptionName = "General";
        public const string BuildFileSettingsCategory = "General Build File Settings";
        public const string BuildEnginePathName = "Build Engine Path";
        public const string BuildEnginePathDescription = "Absolute path to the MSBuild build engine (MSBuild.exe).";

        public const string BuildFileExtensionsName = "Build File Extensions";
        public const string BuildFileExtensionsDescription = "Extensions of file names, which should be regognized as a build file. Enter multiple extensions seperated by semicolons.";
        public const string BuildFileExtensionsDefault = ".build;.targets;.csproj;.vbproj;.jsproj";

        public const string BuildingVerbosityName = "Build Logging Verbosity";
        public const string BuildingVerbosityDescription = "Logging verbosity of the build process.";

        public const string TargetExecutionSettingsCategory = "Target Execution Window Settings";
        public const string ShowImportedTargetsName = "Show imported Target";
        public const string ShowImportedTargetsDescription = "Controls whatever the targets of imported build files should be displayed in the Target Execution Window.";

        public const string ExternalBuildPropertiesOptionName = "External Build Properties";
        public const string ExternalBuildPropertiesCategory = "External Build Properties";
        public const string ExternalBuildPropertiesName = "External Build Properties";
        public const string ExternalBuildPropertiesDescription = "Define external build properties. This properties are globaly available.";

        // Tool window strings
        public const string TargetExecutionWindowName = "Target Execution Window";

        // Editor strings
        public const string BuildFileEditorName = "Build File Editor";
        public const string BuildFileEditorBuildExtension = ".build";
        public const string BuildFileEditorBuildExtensionWithoutDot = "build";
        public const string BuildFileEditorTargetsExtension = ".targets";
        public const string BuildFileEditorTargetsExtensionWithoutDot = "targets";
        public const string BuildFileEditorCSharpExtension = ".csproj";
        public const string BuildFileEditorCSharpExtensionWithoutDot = "csproj";
        public const string BuildFileEditorVisualBasicExtension = ".vbproj";
        public const string BuildFileEditorVisualBasicExtensionWithoutDot = "vbproj";
        public const string BuildFileEditorJSharpExtension = ".jsproj";
        public const string BuildFileEditorJSharpExtensionWithoutDot = "jsproj";
        public const string BuildFileEditorTemplateDirectory = "Templates";
        public const string BuildFileEditorCaption = " [Design]";
        public const string BuildFileEditorXmlNamespace = "http://schemas.microsoft.com/developer/msbuild/2003";

        // Output strings
        public const string OutputWindowName = "AntEater";
    }

    /// <summary>
    /// Provides the ressource keys neede for the Visual Studio integration
    /// </summary>
    internal static class Ressources
    {
        // Package keys
        public const short Package = 1000;
        public const short PackageLoadKey = 100;
        public const short ApplicationName = 101;

        // Option keys
        public const short GeneralOptionName = 110;
        public const short GeneralOptionDescription = 111;
        public const short ExternalBuildPropertiesOptionName = 112;
        public const short ExternalBuildPropertiesOptionDescription = 113;

        // Editor keys
        public const int BuildFileEditorName = 130;

        // Package icons
        public const uint ApplicationIcon = 200;

        // Package bitmaps
        public const uint ApplicationBitmap = 300;

        public const int BuildFileBitmap = 301;
        public const int ExternalBuildPropertiesBitmap = 302;
        public const int RefreshBitmap = 303;

        // Tool window bitmaps
        public const int TargetExecutionBitmap = 320;
        public const int BuildFileExecuteBitmap = 321;
        public const int BuildFileAddBitmap = 322;
        public const int BuildFileRemoveBitmap = 323;
        public const int BuildFileCodeViewBitmap = 324;
        public const int BuildFileDesignerViewBitmap = 325;
    }

    /// <summary>
    /// Provides the commands needed for the Visual Studio integration
    /// </summary>
    internal static class Commands
    {
        // Menus
        public const int ToolMenu = 0x1000;
        public const int Toolbar = 0x2000;
        public const int TargetExecutionToolbar = 0x3000;

        // Menugroups
        public const int VSToolMenuGroup = 0x0001;
        public const int MainToolMenuGroup = 0x1001;
        public const int ToolbarGroup = 0x2001;
        public const int ExecuteTargetExecutionToolbarGroup = 0x3001;
        public const int BuildFileTargetExecutionToolbarGroup = 0x3101;
        public const int ExternalBuildPropertiesTargetExecutionToolbarGroup = 0x3201;
        public const int ViewTargetExecutionToolbarGroup = 0x3301;

        // Commandss
        public const int ShowTargetExecutionWindowCommand = 0x2002;
        public const int ExecuteBuildFileCommand = 0x3002;
        public const int AddBuildFileCommand = 0x3102;
        public const int RemoveBuildFileCommand = 0x3103;
        public const int RefreshCommand = 0x3104;
        public const int EditExternalBuildPropertiesCommand = 0x3202;
        public const int DesignerViewBuildFileCommand = 0x3302;
        public const int CodeViewBuildFileCommand = 0x3303;
    }
}
